///*******************************************************************************
// * Copyright (c) 2004, 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.tests.dnd;
//
//import junit.framework.Test;
//import junit.framework.TestSuite;
//
//import org.eclipse.core.runtime.Path;
//import org.eclipse.core.runtime.Platform;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.ui.IPageLayout;
//import org.eclipse.ui.internal.dnd.TestDropLocation;
//import org.eclipse.ui.tests.TestPlugin;
//import org.eclipse.ui.tests.autotests.AutoTestSuite;
//
///**
// * @since 3.0
// */
//public class DragTestSuite extends AutoTestSuite {
//
//    /**
//     * Returns the suite. This is required to use the JUnit Launcher.
//     */
//    public static Test suite() {
//        return new DragTestSuite();
//    }
//
//    /**
//     * Whether the platform we're running on supports the detaching of views.  
//     * This is initialized in the following static block.
//     * 
//     * @since 3.2
//     */
//	private static final boolean isDetachingSupported;
//	
//	static {
//		Shell shell = new Shell();
//		Composite c = new Composite(shell, SWT.NONE);
//		isDetachingSupported  = c.isReparentable();
//		shell.dispose();
//	}
//
//    public DragTestSuite() {
//        super(Platform.find(TestPlugin.getDefault().getBundle(), new Path("data/dragtests.xml")));
//        
//        String resNav = IPageLayout.ID_RES_NAV;
//        String probView = IPageLayout.ID_PROBLEM_VIEW;
//
//        // Drag sources for views
//        TestDragSource[] viewDragSources = new TestDragSource[] {
//                new ViewDragSource(resNav, false),
//                new ViewDragSource(resNav, true),
//                new ViewDragSource(probView, false),
//                new ViewDragSource(probView, true) };
//
//        // Drag sources for editors
//        TestDragSource[] editorDragSources = new TestDragSource[] {
//                new EditorDragSource(0, false), new EditorDragSource(0, true),
//                new EditorDragSource(2, false), new EditorDragSource(2, true) };
//
//        // Drop targets that will only be tested for views
//
//        // Drag sources for maximized views
//        TestDragSource[] maximizedViewDragSources = new TestDragSource[] {
//                new ViewDragSource(resNav, false, true),
//                new ViewDragSource(resNav, true, true),
//                new ViewDragSource(probView, false, true),
//                new ViewDragSource(probView, true, true) };
//
//        // Now generate all test cases
//        for (int i = 0; i < maximizedViewDragSources.length; i++) {
//            TestDragSource source = maximizedViewDragSources[i];
//            
//            addAllCombinations(source, getMaximizedViewDropTargets(source));
//        }
//        
//        for (int i = 0; i < viewDragSources.length; i++) {
//            TestDragSource source = viewDragSources[i];
//            
//            addAllCombinations(source, getViewDropTargets(source));
//            addAllCombinations(source, getCommonDropTargets(source));
//            
//            // Test dragging onto a detached window
//            addAllCombinationsDetached(source, getDetachedWindowDropTargets(source));
//        }
//      
//        for (int i = 0; i < editorDragSources.length; i++) {
//            TestDragSource source = editorDragSources[i];
//            
//            addAllCombinations(source, getEditorDropTargets(source));
//            addAllCombinations(source, getCommonDropTargets(source));
//            
//            // Test dragging onto a detached window
//            addAllCombinationsDetached(source, getDetachedWindowDropTargets(source));
//        }
//        addTest(new TestSuite(Bug87211Test.class));
//    }
//
//    /**
//     * Returns drop targets that will only be tested for maximized views. (we only need to ensure
//     * that the view will become un-maximized -- the regular view test cases will excercise
//     * the remainder of the view dragging code). We need to drag each kind of maximized view
//     * to something that couldn't be seen while the view is maximized -- like the editor area).
//     * 
//     * @param dragSource
//     * @return
//     * @since 3.1
//     */
//    private TestDropLocation[] getMaximizedViewDropTargets(IWorkbenchWindowProvider originatingWindow) {
//        return new TestDropLocation[] { 
//                new EditorAreaDropTarget(originatingWindow, SWT.RIGHT) };        
//    }
//    
//    private TestDropLocation[] getCommonDropTargets(IWorkbenchWindowProvider dragSource) {
//        TestDropLocation[] targets = { 
//            // Test dragging to the edges of the workbench window
//            new WindowDropTarget(dragSource, SWT.TOP),
//            new WindowDropTarget(dragSource, SWT.BOTTOM),
//            new WindowDropTarget(dragSource, SWT.LEFT), 
//            new WindowDropTarget(dragSource, SWT.RIGHT) };
//        	
//		return targets;
//    }
//    
//    /**
//     * Return all drop targets that only apply to views, given the window being dragged from.
//     * 
//     * @param provider
//     * @return
//     * @since 3.1
//     */
//    private TestDropLocation[] getViewDropTargets(IWorkbenchWindowProvider dragSource) {
//        
//        String resNav = IPageLayout.ID_RES_NAV;
//        String probView = IPageLayout.ID_PROBLEM_VIEW;
//        
//        TestDropLocation[] targets = new TestDropLocation[] {
//            // Editor area
//            new EditorAreaDropTarget(dragSource, SWT.LEFT),
//            new EditorAreaDropTarget(dragSource, SWT.RIGHT),
//            new EditorAreaDropTarget(dragSource, SWT.TOP),
//            new EditorAreaDropTarget(dragSource, SWT.BOTTOM),
//
//            // Resource navigator (a view that isn't in a stack)
//            new ViewDropTarget(dragSource, resNav, SWT.LEFT),
//            new ViewDropTarget(dragSource, resNav, SWT.RIGHT),
//            new ViewDropTarget(dragSource, resNav, SWT.BOTTOM),
//            new ViewDropTarget(dragSource, resNav, SWT.CENTER),
//            new ViewDropTarget(dragSource, resNav, SWT.TOP),
//
//            // Problems view (a view that is in a stack)
//            // Omit the top from this test, since the meaning of dropping on the top border of 
//            // a stack may change in the near future
//            new ViewDropTarget(dragSource, probView, SWT.LEFT),
//            new ViewDropTarget(dragSource, probView, SWT.RIGHT),
//            new ViewDropTarget(dragSource, probView, SWT.BOTTOM),
//            new ViewDropTarget(dragSource, probView, SWT.CENTER),
//            new ViewDropTarget(dragSource, probView, SWT.TOP),
//
//            // Fast view bar
//            new FastViewBarDropTarget(dragSource),
//
//            // View tabs
//            new ViewTabDropTarget(dragSource, resNav), 
//            new ViewTabDropTarget(dragSource, probView),
//            new ViewTitleDropTarget(dragSource, probView),
//            };
//        	
//		return targets;
//    }
//    
//    /**
//     * Return all drop targets that apply to detached windows, given the window being dragged from.
//     * 
//     * @param provider
//     * @return
//     * @since 3.1
//     */
//    private TestDropLocation[] getDetachedWindowDropTargets(IWorkbenchWindowProvider dragSource) {
//        TestDropLocation[] targets = new TestDropLocation[] {
//            // Editor area
//            new ViewDropTarget(dragSource, DragDropPerspectiveFactory.dropViewId1, SWT.CENTER),
//            new ViewDropTarget(dragSource, DragDropPerspectiveFactory.dropViewId3, SWT.CENTER),
//            new ViewTabDropTarget(dragSource, DragDropPerspectiveFactory.dropViewId1),
//            new DetachedDropTarget()
//        };
//        
//		return targets;
//    }
//
//    private TestDropLocation[] getEditorDropTargets(IWorkbenchWindowProvider originatingWindow) {
//        String resNav = IPageLayout.ID_RES_NAV;
//        // Drop targets that will only be tested for editors
//        return new TestDropLocation[] {
//        // A view
//                new ViewDropTarget(originatingWindow, resNav, SWT.CENTER),
//    
//                // A stand-alone editor
//                new EditorDropTarget(originatingWindow, 2, SWT.LEFT),
//                new EditorDropTarget(originatingWindow, 2, SWT.RIGHT),
//                new EditorDropTarget(originatingWindow, 2, SWT.TOP),
//                new EditorDropTarget(originatingWindow, 2, SWT.BOTTOM),
//                new EditorDropTarget(originatingWindow, 2, SWT.CENTER),
//    
//                // Editors (a stack of editors)
//                new EditorDropTarget(originatingWindow, 0, SWT.LEFT),
//                new EditorDropTarget(originatingWindow, 0, SWT.RIGHT),
//                new EditorDropTarget(originatingWindow, 0, SWT.BOTTOM),
//                new EditorDropTarget(originatingWindow, 0, SWT.CENTER),
//                new EditorTabDropTarget(originatingWindow, 0),
//                new EditorTitleDropTarget(originatingWindow, 0), 
//                };
//    }
//    
//    private void addAllCombinations(TestDragSource dragSource,
//            TestDropLocation[] dropTargets) {
//
//        for (int destId = 0; destId < dropTargets.length; destId++) {
//            DragTest newTest = new DragTest(dragSource, dropTargets[destId], getLog());
//            addTest(newTest);
//        }
//    }
//    
//    private void addAllCombinationsDetached(TestDragSource dragSource,
//            TestDropLocation[] dropTargets) {
//
//    	if (isDetachingSupported) {
//	        for (int destId = 0; destId < dropTargets.length; destId++) {
//	            DragTest newTest = new DetachedWindowDragTest(dragSource, dropTargets[destId], getLog());
//	            addTest(newTest);
//	        }
//    	}
//    }
//
//}
